Computing systems and associated networks have revolutionized the way human beings work, play, and communicate. Nearly every aspect of our lives is affected in some way by computing systems. The functionality of a computing system is largely driven by the instructions that are executed by the one or more processors of the computing system. Such instructions are often referred collectively referred to as “software”.
Software is often originally generated using source code in programming languages that have semantics that are more easily interpretable and drafted by a human being. Compilers and interpreters have the task of converting that software from source code to machine code, which is directly interpretable by processors. Sometimes, there are several stages of compilation in which source code is first converted into intermediate code that is relatively independent of the runtime platform, and then once the runtime platform is known or used to execute that code, the intermediate code is converted into machine code.
In order to generate a concept for a logical control flow of the software, the compiler often generates a control flow graph that logically represents all, or at least most, of the possible execution flows that might occur. Furthermore, the compiler attempts to perform software optimization so as to make execution of the software faster and more efficient at runtime without adversely changing the logic performed by the software at runtime.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.